Docker buildx 小记

您所在的位置:网站首页 go dockerfile 打包arm64 Docker buildx 小记

Docker buildx 小记

#Docker buildx 小记| 来源: 网络整理| 查看: 265

多阶段构建

Docker 17.05 版本之前,多阶段构建通常,要么放在一个很大的 Dockerfile 里面。编译打包时间非常长;或者 编写多个 Dockerfile,再通过 shell 脚本将他们组合起来,但生成的镜像会非常大。

Docker 17.05 开始,需要在一个Dockerfile 就可以完成多阶段构建。 通过 as 为其创建别名使用更佳!

FROM golang:alpine as builder ​ RUN apk --no-cache add git ​ WORKDIR /go/src/github.com/go/helloworld/ ​ RUN go get -d -v github.com/go-sql-driver/mysql ​ COPY app.go . ​ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . ​ FROM alpine:latest as prod ​ RUN apk --no-cache add ca-certificates ​ WORKDIR /root/ ​ COPY --from=builder /go/src/github.com/go/helloworld/app . ​ CMD ["./app"]

我们看到最实用的,就是 COPY 参数,可以从某一阶段(任意镜像文件)复制你想要的文件

只构建某一阶段

通过 as 给某一阶段命名后,增加 --target=builder 参数即

docker build --target builder -t username/imagename:tag . ​Buildx

Docker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持 Moby BuildKit 提供的功能。

一般我们通过官网的指导下载 docker(19.03版本以上),都会自带这个插件,不用再单独安装。

docker buildx build -t self/httpd:v1 -f ./Dockerfile .

创建多架构镜像

之前的版本中构建多种系统架构支持的 Docker 镜像,要想使用统一的名字必须使用 $ docker manifest 命令。

Docker 19.03+ 版本中可以使用 docker buildx build 命令使用 BuildKit 构建镜像。该命令支持 --platform 参数可以同时构建支持多种系统架构的 Docker 镜像,大大简化了构建步骤

第一步 安装 binfmt

binfmt_mischandler 这个二进制是 `BuildKit` 能支持多架构的关键。我们直接跑容器就可以了:

docker run --privileged --rm tonistiigi/binfmt --install all第二步 构建自己的 builder 实例docker buildx create --use --name mybuilder --platform=linux/amd64,linux/arm64 --node golang-buildkit-amd64 --driver=docker-container

参数详情参考:

docker buildx create --help第三步 登录镜像仓库docker login

这里默认是登录 DockerHub,之后提示输入对应的账号密码即可。

第四步构建镜像并推送docker buildx build --platform linux/amd64,linux/arm64 -t /:latest --push .

记得带上支持的平台参数 --platform; --push 也是必须的,这样它会自动帮你推送到镜像仓库。

第五步 校验是否成功

我们拉下来镜像后:

# docker buildx imagetools inspect onehand/build-test:latest Name: docker.io/onehand/build-test:latest MediaType: application/vnd.docker.distribution.manifest.list.v2+json Digest: sha256:a67f5511dd3b71834f0552c01d9d2dbdf8e207db582387b72e6a63a2308e94de Manifests: Name: docker.io/onehand/build-test:latest@sha256:beb5ffc022ebd44cc629d52b0cd4bb418f6c86492fec3dccc5f248f3120ec14f MediaType: application/vnd.docker.distribution.manifest.v2+json Platform: linux/amd64 Name: docker.io/onehand/build-test:latest@sha256:67eff09ae3dc1bfbdd9b52212784c1cc32fc4717162654f8916760f0466d2901 MediaType: application/vnd.docker.distribution.manifest.v2+json Platform: linux/arm64

可以看到 manifests 支持的两个Platform

到这里构建双架构镜像就算制作完成了。 当我们使用 docker pull 的时候,docker 会自动为我们选择操作系统架构对应的镜像



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3